﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using log4net;

namespace PaymentHelper.Core.ExceptionHandler
{
    [Serializable]
    public class PaymentHelperException:Exception
    {
        /// <summary>
        /// Initializes a new instance of the Exception class with a specified error mesage and the sender object
        /// </summary>
        /// <param name="level">Level of exception</param>
        /// <param name="sender">The info of the class which send exception</param>
        /// <param name="message">The message that describes the error.</param>
        public PaymentHelperException(ExceptionLevel level, string sender, string message)
            : base(message)
        {
            PaymentHelperLogger.Log(level,sender,message);
        }

        /// <summary>
        /// Initializes a new instance of the Exception class with a specified error message.
        /// </summary>
        /// <param name="level">Level of exception</param>
        /// <param name="sender">The info of the class which send exception</param>
		/// <param name="messageFormat">The exception message format.</param>
		/// <param name="args">The exception message arguments.</param>
        public PaymentHelperException(ExceptionLevel level, string sender, string messageFormat, params object[] args)
			: base(string.Format(messageFormat, args))
		{
            PaymentHelperLogger.Log(level,sender,string.Format(messageFormat,args));
		}

        /// <summary>
        /// Initializes a new instance of the Exception class with a specified error message and a reference to the inner exception that is the cause of this exception.
        /// </summary>
        /// <param name="level">Level of exception</param>
        /// <param name="sender">The info of the class which send exception</param>
        /// <param name="message">The error message that explains the reason for the exception.</param>
        /// <param name="innerException">The exception that is the cause of the current exception, or a null reference if no inner exception is specified.</param>
        public PaymentHelperException(ExceptionLevel level, string sender, string message, Exception innerException)
            : base(message, innerException)
        {
            string mes = string.Format("{0}/{1}",message,innerException.Message);
            PaymentHelperLogger.Log(level, sender, mes);
        }
    }
}
